package com.guigu.springboot.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author: kaiyi
 * @create: 2020-08-01 11:16
 */

/**
 * 将配置文件yml 中的配置的每一个属性的值，映射到这个组件中
 * @ConfigurationProperties：告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定；
 *   prefix = "person"：配置文件中哪个下面的所有属性进行一一映射
 */
@Component
@ConfigurationProperties(prefix="person")
public class Person {

  /**
   * spring 旧的写法DI，注入属性值
   * <bean class="Person">
   *   <property name="lastName" value="kaiyi"></property>
   * </bean>
   */
  @Value("${person.last-name}")
  private String lastName;

  // spring # 表达式写法
  @Value("#{11*2}")
  private Integer age;
  @Value("true")
  private Boolean boss;
  private Date birth;

  private Map<String,Object> maps;
  private List<Object> lists;
  private Dog dog;

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public Boolean getBoss() {
    return boss;
  }

  public void setBoss(Boolean boss) {
    this.boss = boss;
  }

  public Date getBirth() {
    return birth;
  }

  public void setBirth(Date birth) {
    this.birth = birth;
  }

  public Map<String, Object> getMaps() {
    return maps;
  }

  public void setMaps(Map<String, Object> maps) {
    this.maps = maps;
  }

  public List<Object> getLists() {
    return lists;
  }

  public void setLists(List<Object> lists) {
    this.lists = lists;
  }

  public Dog getDog() {
    return dog;
  }

  public void setDog(Dog dog) {
    this.dog = dog;
  }

  @Override
  public String toString() {
    return "Person{" +
        "lastName='" + lastName + '\'' +
        ", age=" + age +
        ", boss=" + boss +
        ", birth=" + birth +
        ", maps=" + maps +
        ", lists=" + lists +
        ", dog=" + dog +
        '}';
  }
}
